/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package NM_Procesos;

import NM_ClasesGenerales.*;
import java.util.ArrayList;

/**
 *
 * @author alumnos
 */
public class CostearPNR {

    public int[] CuentaPasajero(Solicitud oSolicitud) {

        int[] oContPax = null; // = {0, 0, 0};


        try {

            if (oSolicitud != null) {
                if (oSolicitud.getObjPasseger() != null) {

                    Passenger objPasajero = null;

                    //oContPax = new int[0];
                    // pasajeros
                    for (byte i = 0; i < oSolicitud.getObjPasseger().size(); i++) {

                        objPasajero = new Passenger();
                        objPasajero = (Passenger) oSolicitud.getObjPasseger().get(i);

                        if (objPasajero.getBolMarca() == 1) {

                            if (objPasajero.getStrPassenegerType().equals("ADT")) {
                                oContPax[0] += 1;
                            }
                            if (objPasajero.getStrPassenegerType().equals("CNN")) {
                                oContPax[1] += 1;
                            }
                            if (objPasajero.getStrPassenegerType().equals("INF")) {
                                oContPax[2] += 1;
                            }
                        }

                    }

                }
            }

        } catch (Exception ex) {
        }

        return oContPax;

    }

    public byte Tarifar(Solicitud oSolicitud) {


        ImprimirMensajes oImprimirMensajes = new ImprimirMensajes();

        Passenger objPasajero = null;
        Itinerario objItinerario = null;

        byte oRespuesta = 0;
        int[] oContPax = {0, 0, 0};

        // pasajeros
        for (byte i = 0; i < oSolicitud.getObjPasseger().size(); i++) {

            objPasajero = new Passenger();
            objPasajero = (Passenger) oSolicitud.getObjPasseger().get(i);

            if (objPasajero.getBolMarca() == 1) {

                if (objPasajero.getStrPassenegerType().equals("ADT")) {
                    oContPax[0] += 1;
                }
                if (objPasajero.getStrPassenegerType().equals("CNN")) {
                    oContPax[1] += 1;
                }
                if (objPasajero.getStrPassenegerType().equals("INF")) {
                    oContPax[2] += 1;
                }
            }

        }

        // segmento


        String oPseg = "";
        String oUseg = "";
        String oCla = ""; //clave
        String xCla = "";
        int xLen = 0;
        String oOrig = "O";

        for (byte i = 0; i < oSolicitud.getObjItinerario().size(); i++) {

            objItinerario = (Itinerario) oSolicitud.getObjItinerario().get(i);


            if (objItinerario.getBolMarca() == 1) {

                if (i == 0) {
                    oPseg = objItinerario.getStrCityDeparture();
                }


                oUseg = objItinerario.getStrCityArrival();


                if (oCla.indexOf(objItinerario.getStrClase()) == -1) {
                    oCla += objItinerario.getStrClase() + "/";
                }


            }
        }


        if (oPseg.equals(oUseg)) {
            oOrig = "R";
        }

        xLen = oCla.length();

        String AuxTipoPaxTarifa = null;


        double[] oTotales = {0.0, 0.0, 0.0};
        boolean oFlagTarifa = false;

        ArrayList arrCotizacion = new ArrayList();

        for (byte i = 0; i < oContPax.length; i++) {

            if (oContPax[i] > 0) {

                if (i == 0) {
                    AuxTipoPaxTarifa = "ADT";
                }
                if (i == 1) {
                    AuxTipoPaxTarifa = "CNN";
                }
                if (i == 2) {
                    AuxTipoPaxTarifa = "INF";
                }


                CostearPNR oCostear = new CostearPNR();
                Object oObjResultado = null;
                oObjResultado = oCostear.CostearReserva((byte) oContPax[i], AuxTipoPaxTarifa, oCla.substring(0, xLen - 1), oOrig);

                if (oObjResultado.getClass().equals(Cotizacion.class)) {
                    Cotizacion oResultadoCotizacion = new Cotizacion();
                    oResultadoCotizacion = (Cotizacion) oObjResultado;

                    arrCotizacion.add(oResultadoCotizacion);

                    oImprimirMensajes.print_message(" ");
                    oImprimirMensajes.print_message("Tarifa por pasajero : " + AuxTipoPaxTarifa);

                    oImprimirMensajes.print_message(oImprimirMensajes.mergeWords("Neto", 9)
                            + oImprimirMensajes.mergeWords("IGV", 9)
                            + oImprimirMensajes.mergeWords("TAXES", 9)
                            + oImprimirMensajes.mergeWords("TOTAL", 9));


                    double oTotalReserva = 0.0;

                    oTotalReserva = oResultadoCotizacion.getoTarifas().getoNeto() + oResultadoCotizacion.getoIGV() + oResultadoCotizacion.getoTarifas().getoTax();

                    oImprimirMensajes.print_message(oImprimirMensajes.mergeWords(oResultadoCotizacion.getoTarifas().getoNeto(), 9)
                            + oImprimirMensajes.mergeWords(oResultadoCotizacion.getoIGV(), 9)
                            + oImprimirMensajes.mergeWords(oResultadoCotizacion.getoTarifas().getoTax(), 9)
                            + oImprimirMensajes.mergeWords(Math.round(oTotalReserva), 9));

                    oTotales[i] = ((int) oContPax[i] * oTotalReserva);

                    oImprimirMensajes.print_message(" ");
                    oImprimirMensajes.print_message("Total por pasajero " + oContPax[i] + " " + AuxTipoPaxTarifa + " ....USD  " + oTotales[i]);

                    oFlagTarifa = true;
                } else {
                    oImprimirMensajes.print_message(oObjResultado);
                    oFlagTarifa = false;
                    break;
                }
            }

        }


        if (oFlagTarifa) {
            double oGranTotal = oTotales[0] + oTotales[1] + oTotales[2];
            oImprimirMensajes.print_message(" ");
            oImprimirMensajes.print_message("Total por reserva........USD " + Math.round(oGranTotal));
            oImprimirMensajes.print_message(" ");

            oSolicitud.setCotizacion(arrCotizacion);

            oRespuesta = 1;
        }


        return oRespuesta;

    }

    public Object CostearReserva(byte cCantPax, String tPax, String cClass, String oOri) {

        Object oObjResultado = null;

        LectorDatos oLectorDatos = new LectorDatos();
        ArrayList oTarifasArrayList = new ArrayList();
        oTarifasArrayList = oLectorDatos.LeerArchivoTxt(3, "tarifas");

        double AuxNeto = 0.0;
        double AuxTaxes = 0.0;
        String oAuxTipoPax = null;

        ArrayList arrTarifas = null;

        Tarifas oTarifas = null;
        Cotizacion oCotizacion = null;


        boolean oFlagPax = false;

        for (int i = 0; i < oTarifasArrayList.size(); i++) {

            String oCadenaTarifas = (String) oTarifasArrayList.get(i);
            String[] oAuxTarifas = oCadenaTarifas.split(",");

            if (oAuxTarifas.length == 1) {
                if (tPax.equals(oAuxTarifas[0])) {
                    oFlagPax = true;
                } else {
                    oFlagPax = false;
                }

            } else {

                if (oFlagPax) {
                    if (oOri.equals(oAuxTarifas[1]) && cClass.indexOf(oAuxTarifas[0]) > -1) {
                        if (arrTarifas == null) {
                            arrTarifas = new ArrayList();
                        }

                        AuxNeto = Double.parseDouble(oAuxTarifas[2]) / cClass.split("/").length;
                        AuxTaxes = Double.parseDouble(oAuxTarifas[3]) / cClass.split("/").length;

                        arrTarifas.add(new Tarifas(tPax, oAuxTarifas[0], oAuxTarifas[1], AuxNeto, AuxTaxes));

                    }

                }
            }


        }


        if (arrTarifas != null) {
            if (arrTarifas.size() == cClass.split("/").length) {

                AuxNeto = 0.0;
                AuxTaxes = 0.0;

                for (int i = 0; i < arrTarifas.size(); i++) {
                    oTarifas = new Tarifas();
                    oTarifas = (Tarifas) arrTarifas.get(i);

                    AuxNeto += oTarifas.getoNeto();
                    AuxTaxes += oTarifas.getoTax();

                }


                oTarifas = new Tarifas(tPax, cClass, oOri, Math.round(AuxNeto), Math.round(AuxTaxes));

                oCotizacion = new Cotizacion(cCantPax, Math.round(AuxNeto));
                oCotizacion.setoTarifas(oTarifas);

                oObjResultado = oCotizacion;

            } else {
                String oMensaje = "Tarifa no combinable, verifique las regulaciones";
                oObjResultado = oMensaje;
            }
        } else {
            String oMensaje = "Tarifa no combinable, verifique las regulaciones";
            oObjResultado = oMensaje;
        }

        return oObjResultado;

    }
}
